﻿#region Header
// Copyright 2007-2011, Jerónimo Milea
// 
// This file is part of NetJsWire.
// 
//     NetJsWire is free software: you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as published by
//     the Free Software Foundation, either version 3 of the License, or
//     (at your option) any later version.
// 
//     NetJsWire is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.
// 
//     You should have received a copy of the GNU General Public License
//     along with NetJsWire.  If not, see <http://www.gnu.org/licenses/>.
#endregion

using System.ComponentModel;
using Newtonsoft.Json;

namespace NetJsWire.Widgets.Config
{
    [TypeConverter( typeof( ThicknessConverter ) )]
    [JsonObject]
    public sealed class Thickness
    {
        public Thickness()
        {
            Top = 0;
            Right = 0;
            Bottom = 0;
            Left = 0;
        }

        public Thickness( int thickness )
        {
            Top = thickness;
            Right = thickness;
            Bottom = thickness;
            Left = thickness;
        }

        public Thickness( int topBottom, int rightLeft )
        {
            Top = topBottom;
            Right = rightLeft;
            Bottom = topBottom;
            Left = rightLeft;
        }

        [DefaultValue( 0 )]
        [JsonProperty( "top", DefaultValueHandling = DefaultValueHandling.Ignore )]
        public int Top { get; set; }

        [DefaultValue( 0 )]
        [JsonProperty( "right", DefaultValueHandling = DefaultValueHandling.Ignore )]
        public int Right { get; set; }

        [DefaultValue( 0 )]
        [JsonProperty( "bottom", DefaultValueHandling = DefaultValueHandling.Ignore )]
        public int Bottom { get; set; }

        [DefaultValue( 0 )]
        [JsonProperty( "left", DefaultValueHandling = DefaultValueHandling.Ignore )]
        public int Left { get; set; }

        public override bool Equals( object obj )
        {
            if ( obj is Thickness )
            {
                var thick = obj as Thickness;
                return thick.Bottom == Bottom && thick.Left == Left && thick.Right == Right && thick.Top == Top;
            }
            return base.Equals( obj );
        }

        public override int GetHashCode()
        {
            return ( Top + Right + Bottom + Left ).GetHashCode();
        }

        public bool ShouldSerialize()
        {
            return Top != 0 || Right != 0 || Bottom != 0 || Left != 0;
        }
    }
}
